﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using Novapangeia.Dominio;
using Novapangeia.Negocio;

namespace Novapangeia.Web
{
    public partial class Castelo : LoggedPage
    {
        public Usuario usuario = null;

        protected void Page_Load(object sender, EventArgs e)
        {
            usuario = GerenciadorUsuario.consultarUsuarioDaSessao();
            ValidaConstrucao(usuario);
        }

        private void ValidaConstrucao(Usuario usuario)
        {
            Construcao construcaoUsuario = usuario.construcoes;

            //Exibe informações de Nível
            lblLevelArmazem.Text = construcaoUsuario.Armazem.ToString();
            lblLevelFazenda.Text = construcaoUsuario.Fazenda.ToString();
            lblLevelMercado.Text = construcaoUsuario.Mercado.ToString();
            lblLevelMina.Text = construcaoUsuario.Mina.ToString();
            lblLevelMuralha.Text = construcaoUsuario.Muralha.ToString();
            lblLevelSerraria.Text = construcaoUsuario.Serraria.ToString();
            lblLevelTorres.Text = construcaoUsuario.Torres.ToString();

            //Exibe informações de custo
            CustoArmazemUserControl.BindCusto(GerenciadorConstrucao.CustoArmazem(usuario));
            CustoEstabuloUserControl.BindCusto(GerenciadorConstrucao.CustoEstabulo(usuario));
            CustoFazendaUserControl.BindCusto(GerenciadorConstrucao.CustoFazenda(usuario));
            CustoMeracadoUserControl.BindCusto(GerenciadorConstrucao.CustoMercado(usuario));
            CustoMinaUserControl.BindCusto(GerenciadorConstrucao.CustoMina(usuario));
            CustoMuralhaUserControl.BindCusto(GerenciadorConstrucao.CustoMuralha(usuario));
            CustoQuarteUserControl.BindCusto(GerenciadorConstrucao.CustoQuartel(usuario));
            CustoSerrariaUserControl.BindCusto(GerenciadorConstrucao.CustoSerraria(usuario));
            CustoTorresUserControl.BindCusto(GerenciadorConstrucao.CustoTorres(usuario));

            //Reseta o estado dos botões
            btnConstruirEstabulo.Enabled = true;
            btnConstruirFazenda.Enabled = true;
            btnConstruirMercado.Enabled = true;
            btnConstruirMina.Enabled = true;
            btnConstruirMuralha.Enabled = true;
            btnConstruirQuartel.Enabled = true;
            btnConstruirSerraria.Enabled = true;

            //Valida pre-requisitos
            if (!GerenciadorConstrucao.MuralhaLiberada(usuario))
            {
                lblStatusMuralha.Text = "É preciso liberar Engenharia.\n";
                btnConstruirMuralha.Enabled = false;
            }

            if (!GerenciadorConstrucao.TorreLiberada(usuario))
            {
                lblStatusTorres.Text = "É preciso liberar Engenharia e construir Quartel.\n";
                btnConstruirTorres.Enabled = false;
            }

            if (!GerenciadorConstrucao.EstabuloLiberado(usuario))
            {
                lblStatusEstabulo.Text = "É preciso liberar Cavalaria.\n";
                btnConstruirEstabulo.Enabled = false;
            }

            if (!GerenciadorConstrucao.QuartelLiberado(usuario))
            {
                lblStatusQuartel.Text = "É preciso construir Armazém. \n";
                btnConstruirQuartel.Enabled = false;
            }
            
            //Valida se o usuário pode pagar a tecnologia
            if(!GerenciadorConstrucao.podePagarEstabulo(usuario))
            {
                lblStatusEstabulo.Text = "Você não possui recursos suficientes.";
                btnConstruirEstabulo.Enabled = false;
            }

            if (!GerenciadorConstrucao.podePagarFazenda(usuario))
            {
                lblStatusFazenda.Text = "Você não possui recursos suficientes.";
                btnConstruirFazenda.Enabled = false;
            }

            if (!GerenciadorConstrucao.podePagarMercado(usuario))
            {
                lblStatusMercado.Text = "Você não possui recursos suficientes.";
                btnConstruirMercado.Enabled = false;
            }

            if (!GerenciadorConstrucao.podePagarMina(usuario))
            {
                lblStatusMina.Text = "Você não possui recursos suficientes.";
                btnConstruirMina.Enabled = false;
            }

            if (!GerenciadorConstrucao.podePagarMuralha(usuario))
            {
                lblStatusMuralha.Text = "Você não possui recursos suficientes.";
                btnConstruirMuralha.Enabled = false;
            }

            if (!GerenciadorConstrucao.podePagarQuartel(usuario))
            {
                lblStatusQuartel.Text = "Você não possui recursos suficientes.";
                btnConstruirQuartel.Enabled = false;
            }

            if (!GerenciadorConstrucao.podePagarSerraria(usuario))
            {
                lblStatusSerraria.Text = "Você não possui recursos suficientes.";
                btnConstruirSerraria.Enabled = false;
            }

            if (!GerenciadorConstrucao.podePagarArmazem(usuario))
            {
                lblStatusArmazem.Text = "Você não possui recursos suficientes.";
                btnConstruirArmazem.Enabled = false;
            }
        }

        private void MostrarMensagemUsuario(bool sucesso)
        {
            if (sucesso)
                //ClientScript.RegisterStartupScript(typeof(Page), "alertaSucesso", "<script type=text/javascript> alert('Operação realizada com sucesso.'); </script>");
                lblResultado.Text = "Operação realizada com sucesso.";
            else
                //ClientScript.RegisterStartupScript(typeof(Page), "alertaFalha", "<script type=text/javascript> alert('Não foi possível realizar a operação.'); </script>");
                lblResultado.Text = "Não foi possível realizar a operação.";
        }

        protected void btnConstruirArmazem_Click(object sender, EventArgs e)
        {
            bool sucesso = GerenciadorConstrucao.construirArmazem(usuario);

            MostrarMensagemUsuario(sucesso);
        }

        protected void btnConstruirEstabulo_Click(object sender, EventArgs e)
        {
            bool sucesso = GerenciadorConstrucao.construirEstabulo(usuario);

            MostrarMensagemUsuario(sucesso);
        }

        protected void btnConstruirFazenda_Click(object sender, EventArgs e)
        {
            bool sucesso = GerenciadorConstrucao.construirFazenda(usuario);

            MostrarMensagemUsuario(sucesso);
        }

        protected void btnConstruirMercado_Click(object sender, EventArgs e)
        {
            bool sucesso = GerenciadorConstrucao.construirMercado(usuario);

            MostrarMensagemUsuario(sucesso);
        }

        protected void btnConstruirMina_Click(object sender, EventArgs e)
        {
            bool sucesso = GerenciadorConstrucao.construirMina(usuario);

            MostrarMensagemUsuario(sucesso);
        }

        protected void btnConstruirMuralha_Click(object sender, EventArgs e)
        {
            bool sucesso = GerenciadorConstrucao.construirMuralha(usuario);

            MostrarMensagemUsuario(sucesso);
        }

        protected void btnConstruirQuartel_Click(object sender, EventArgs e)
        {
            bool sucesso = GerenciadorConstrucao.construirQuartel(usuario);

            MostrarMensagemUsuario(sucesso);
        }

        protected void btnConstruirSerraria_Click(object sender, EventArgs e)
        {
            bool sucesso = GerenciadorConstrucao.construirSerraria(usuario);

            MostrarMensagemUsuario(sucesso);
        }

        protected void btnConstruirTorres_Click(object sender, EventArgs e)
        {
            bool sucesso = GerenciadorConstrucao.construirTorres(usuario);

            MostrarMensagemUsuario(sucesso);
        }

        protected void Page_LoadComplete(object sender, EventArgs e)
        {
            ValidaConstrucao(usuario);
        }
    }
}